package ar.maikoova.modelsControllers;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import ar.maikoova.bd.Conector;
import ar.maikoova.bd.ParametrosConexion;
import ar.maikoova.models.Cuota;
import ar.maikoova.models.UnidadFuncional;

public class CuotaController {
	
	Conector c;
	Connection conexion;
	
	public CuotaController() {
		// TODO Auto-generated constructor stub
	}



	
	public Integer pagarCuota (Cuota cuota) throws SQLException{
		try{
			c = new Conector(ParametrosConexion.getParametros());
			conexion = c.getConnection();
		    PreparedStatement ps = conexion.prepareStatement(
				      "insert into cuotas(idUnidadFuncional,numero,fechaEmision,fechaPago,monto) values(?,?,?,?,?)");
		    ps.setInt(1, cuota.getIdUnidadFuncional());
			ps.setInt(2, cuota.getNumero());
			ps.setDate(3, cuota.getFechaEmision());
			ps.setDate(4, new java.sql.Date(new java.util.Date().getTime()));
			ps.setFloat(5, cuota.getMonto());
			
			
System.out.println(cuota.getIdUnidadFuncional());
System.out.println(cuota.getNumero());
System.out.println(cuota.getFechaEmision());
System.out.println(cuota.getFechaPago());
System.out.println(cuota.getMonto() );

			ps.executeUpdate();
			ps.close();
			return 0;
		}catch(Exception e){
			e.printStackTrace();

			System.out.println("Consulta000 erronea");
			return -1;
		}
		finally{
			conexion.close();
		}
	
	}
	
	
	
	// trae todas las cuotas pagas en una coleccion para que pueda listar con detalle
	@SuppressWarnings("finally")
	public Vector<Cuota> getCuotasPagas(UnidadFuncional uf) throws SQLException{
		Vector<Cuota> Cuotas = new Vector<Cuota>();
		
		try{
			c = new Conector(ParametrosConexion.getParametros());
			conexion = c.getConnection();
			Statement st = conexion.createStatement();
			
			ResultSet rs = st.executeQuery("SELECT * FROM Cuotas where idUnidadFuncional = " + uf.getIdUnidadFuncional());

			while(rs.next()){
				Cuota c = new Cuota(uf.getIdUnidadFuncional(), rs.getInt("numero"), rs.getDate("fechaEmision"), rs.getDate("fechaPago"), rs.getFloat("monto"), rs.getInt("idCuota"));	
				Cuotas.add(c);
			}
			rs.close();
		}catch(SQLException e){
			System.out.println("Consulta1 erronea");
			return null;
		}
		finally{
			
			conexion.close();
			return Cuotas;
		}				
	}
	
	
	// Calcula cuanto es el monto que debe abonar en la proxima cuota armando 
	// el objeto con los datos necesarios
	
	@SuppressWarnings("finally")
	public Cuota getProximaCuota(UnidadFuncional uf) throws SQLException{
		Integer cantidadCuotas = (int)0;
		Float montoRestante = (float)0;
		Cuota cuota = null;
		try{
			c = new Conector(ParametrosConexion.getParametros());
			conexion = c.getConnection();
			Statement st = conexion.createStatement();
			

			ResultSet rs = st.executeQuery("SELECT cantidadCuotas,montoRestante FROM UnidadesFuncional where idUnidadFuncional = " + uf.getIdUnidadFuncional());

			if(rs.next()){

				cantidadCuotas =  rs.getInt("cantidadCuotas");
				montoRestante = rs.getFloat("montoRestante");
				
				
				rs.close();
				
				ResultSet rm = st.executeQuery("select count(*) as cuotasPagas from Cuotas where idUnidadFuncional = " + ((Integer)uf.getIdUnidadFuncional()).toString());
				if(rm.next()){
					Integer cuotasPagas = rm.getInt("cuotasPagas");
					cuota = new Cuota(uf.getIdUnidadFuncional(),cuotasPagas+1,new Date(new java.util.Date().getTime()),null,montoRestante/(cantidadCuotas - cuotasPagas),0);
					rm.close();
					return cuota;	
				}else{
					return null;
				}
				
			}else{
				return null;
			}
			 
		}catch(Exception e){
			e.printStackTrace();

			System.out.println("Consulta erronea");
			
			return null;
		}
		finally{
			conexion.close();
			return cuota;
		}		
	}	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
